package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.pojo.BmsAbnormalVO;
import com.tbit.uqbike.object.pojo.BmsBatch;
import com.tbit.uqbike.object.pojo.BmsBatteryHealthAnalyse;
import com.tbit.uqbike.object.pojo.dto.*;
import com.tbit.uqbike.object.pojo.vo.BatchOperationMsgVO;
import com.tbit.uqbike.object.pojo.vo.BmsBatteryPowerChangeLogVO;
import com.tbit.uqbike.object.pojo.vo.BmsBatteryVO;
import com.tbit.uqbike.object.pojo.vo.BmsConfigVO;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 云BMS管理接口
 *
 * @Author:BUGTian
 * @DATE: 2022/7/13
 */
public interface BmsService {
    /**
     * 云bms授权数量配置
     *
     * @param bmsConfigDTO
     * @return
     */
    Result editBmsConfig(BmsConfigDTO bmsConfigDTO);

    /**
     * 云bms授权数量查询
     *
     * @param accountId
     * @return
     */
    BmsConfigVO queryBmsConfig(Integer accountId);

    /**
     * 云bms电池批次添加
     *
     * @param bmsBatchDTO
     * @return
     */
    Result addBmsBatch(BmsBatchDTO bmsBatchDTO);

    /**
     * 云bms电池批次修改
     *
     * @param bmsBatchUpdateDTO
     * @return
     */
    Result updateBmsBatch(BmsBatchUpdateDTO bmsBatchUpdateDTO);

    /**
     * 云bms电池批次删除
     *
     * @param batch
     * @return
     */
    Result deleteBmsBatch(Integer batch);

    /**
     * 云bms电池批次分页查询
     *
     * @param page
     * @param size
     * @param accountId
     * @param batchName
     * @param startTime
     * @param endTime
     * @return
     */
    Result<PageResult<BmsBatch>> queryPageBmsBatch(Integer page, Integer size, Integer accountId, String batchName, Date startTime, Date endTime);

    /**
     * 添加云bms电池
     *
     * @param bmsBatteryDTO
     * @return
     */
    Result<BatchOperationMsgVO<String>> addBmsBattery(BmsBatteryDTO bmsBatteryDTO);

    /**
     * 分页查询bms电池信息
     *
     * @param bmsBatteryQueryDTO
     * @return
     */
    PageResult<BmsBatteryVO> queryPageBmsBattery(BmsBatteryQueryDTO bmsBatteryQueryDTO);

    /**
     * 批量删除bms电池
     *
     * @param bmsBatteryNoList
     */
    BatchOperationMsgVO<String> deleteBmsBattery(@Param("bmsBatteryNoList") List<String> bmsBatteryNoList);

    /**
     * bms电池图表分析
     *
     * @param bmsBatteryQueryDTO
     * @return
     */
    BmsBatteryHealthAnalyse queryBmsBatteryHealthAnalyze(BmsBatteryQueryDTO bmsBatteryQueryDTO);

    /**
     * 分页查询异常分析信息
     *
     * @param page         当前页码
     * @param size         每页显示的行
     * @param accountId    品牌id
     * @param adAccountId  区域id
     * @param batteryNO    电池编号
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @param handle       处理状态
     * @param abnormalType 异常类型
     * @return
     */
    PageResult<BmsAbnormalVO> queryPageBmsAbnormal(Integer page, Integer size, Integer accountId, Integer adAccountId, String batteryNO, Date startTime, Date endTime, Integer handle, Integer abnormalType);

    /**
     * 分页查询云bms电池历史
     *
     * @param page        当前页码
     * @param size        每页显示的行
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param batteryNO   电池编号
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return
     */
    PageResult<BmsBatteryPowerChangeLogVO> queryBmsBatteryPowerChangeLog(Integer page, Integer size, Integer accountId, Integer adAccountId, String batteryNO, Date startTime, Date endTime);

    /**
     * 清除bms电池异常
     *
     * @param batteryNO
     * @param abnormalType
     * @param addTime
     */
    void deleteBmsAbnormal(String batteryNO, Integer abnormalType, Date addTime);

    /**
     * 批量修改云bms电池的批次
     *
     * @param bmsBatteryDTO
     * @return
     */
    Result<BatchOperationMsgVO<String>> updateBmsBattery(BmsBatteryDTO bmsBatteryDTO);
}
